// 车票信息的切片，作用：存储全局的车票信息

// 一个切片中，包含：切片的数据、切片的 reducer
// 1. 如何创建切片
// 2. 切片中如何定义数据
// 3. 如何修改切片中的数据
// 4. 怎么把切片挂载到 Store 中

import { createSlice } from '@reduxjs/toolkit'

// 创建切片
const ticketSlice = createSlice({
  // 切片的名字（唯一的）
  name: 'ticket',
  // 切片中的初始数据
  initialState: {
    from: '北京',
    to: '上海',
    // 仅看高铁/动车
    onlyCRH: false,
    // 出发的日期
    date: Date.now()
  },
  // 要想修改到 initialState 中存储的全局数据，必须调用 reducer 才可以
  reducers: {
    // update数据的名字() {}
    // updateFromAndTo(state, action) {}
    updateFromAndTo(state) {
      // temp 临时变量，先把 from 的值保存到 temp 变量中
      const temp = state.from
      // 把 to 的值更新到 from 上
      state.from = state.to
      // 把临时变中，存储的 from 的值，更新到 to 上
      state.to = temp
    },
    // 调用此函数，更新 onlyCRH 的值
    // action.payload 就是组件提交过来的数据
    updateOnlyCRH(state, action) {
      console.log(action)
      state.onlyCRH = action.payload
    },
    // 更新出发的日期
    updateDate(state, action) {
      state.date = action.payload
    },
    // 更新出发地和目的地
    // 约定：action.payload 是一个对象，格式为 { type: 'from或to', city: 城市名 }
    updateCity(state, action) {
      if (action.payload.type === 'to') {
        state.to = action.payload.city
      } else {
        state.from = action.payload.city
      }
    }
  }
})

// 向外导出当前切片的 reducer
export default ticketSlice.reducer

// 向外导出更新数据的函数
export const { updateFromAndTo, updateOnlyCRH, updateDate, updateCity } =
  ticketSlice.actions
